package com.qf.smsplatform.strategy.service.impl;

import com.qf.smsplatform.common.constants.CacheConstants;
import com.qf.smsplatform.common.constants.StrategyConstants;
import com.qf.smsplatform.common.model.StandardSubmit;
import com.qf.smsplatform.strategy.service.Strategy;
import com.qf.smsplatform.strategy.service.api.CacheService;
import com.qf.smsplatform.strategy.util.PushMsgUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * 黑名单策略
 */
@Service(value = "black")
@Slf4j
public class BlackStrategy implements Strategy {

    @Autowired
    private CacheService cacheService;

    @Autowired
    private PushMsgUtil pushMsgUtil;

    @Override
    public boolean strategy(StandardSubmit submit) {
        log.info("【策略模块】 黑名单策略开始执行！！！");
        //--------------------------------------------------------
        //----------------1. 获取目标手机号----------------------------------------
        //--------------------------------------------------------
        String mobile = submit.getDestMobile();

        //--------------------------------------------------------
        //----------------2. 拼接出Redis中对应的Key----------------------------------------
        //--------------------------------------------------------
        String key = CacheConstants.CACHE_PREFIX_BLACK + mobile;

        //--------------------------------------------------------
        //-----------------3. 根据key去缓存模块中查询数据---------------------------------------
        //--------------------------------------------------------
        String value = cacheService.get(key);

        //--------------------------------------------------------
        //-----------------4. 如果查询出的数据为null   》》》  当前手机号不属于黑名单 ，返回true即可  -----------------------------------------
        //--------------------------------------------------------
        if(StringUtils.isEmpty(value)){
            log.info("【策略模块】 黑名单策略执行成功！！！");
            return true;
        }else {
            //--------------------------------------------------------
            //-----------------5. 如果查询出的数据不为null   》》》  当前手机号属于黑名单 ，发送两个消息到MQ，并且return false  -----------------------------------------
            //--------------------------------------------------------
            log.info("【策略模块】 黑名单策略执行失败。。。");
            System.out.println("发送消息到MQ！！！");
            // 将submit发送到写日志topic队列中,让ES保存当前Submit信息
            pushMsgUtil.sendLog(submit, StrategyConstants.STRATEGY_ERROR_BLACK);
            // 将StandardReport对象封装,发送到状态报告topic队列中,让接口模块给用户推送
            pushMsgUtil.pushReport(submit,StrategyConstants.STRATEGY_ERROR_BLACK);
            return false;
        }
    }
}
